package plugados.visao;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.ImageIcon;

import java.awt.Color;

import plugados.controle.ConexaoBanco;
import plugados.modelo.ModeloTabela;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.awt.Cursor;

public class FrmEstado extends JFrame {

	ConexaoBanco conexao = new ConexaoBanco(); 

	private JPanel contentPane;
	private JTextField textFieldCod;
	private JTextField textFieldEstado;
	private JTextField textFieldSigla;
	private JTable jTable = new JTable();
	private JButton btNovo = new JButton("");
	private JButton btSalvar = new JButton("");
	private JButton btEditar = new JButton("");
	private JButton btExcliur = new JButton("");
	private JButton btSair = new JButton("");
	

	/**
	 *  Preenchendo jTable
	 */
	public void preencherTabela(String sql) {
		
		ArrayList<Object[]> dados = new ArrayList<Object[]>();
		
		String[] colunas =  new String[]{"ID", "Nome", "Sigla"};
		
		conexao.executaSQL(sql);
		try {
			conexao.rs.first();
			do {
				dados.add(new Object[]{conexao.rs.getInt("id_estado"), conexao.rs.getString("nm_estado"), conexao.rs.getString("sg_estado")});
			} while(conexao.rs.next());
		} catch(SQLException e) {
			JOptionPane.showMessageDialog(null, "Erro ao preencher tabela!\n" +
												"Erro: " + e.getMessage());
		}
	
		ModeloTabela modelo = new ModeloTabela(dados, colunas);
		jTable.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
		jTable.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		jTable.setRowMargin(3);
		jTable.setFont(new Font("Courier New", Font.BOLD, 15));
		jTable.setModel(modelo);
		
		jTable.getColumnModel().getColumn(0).setPreferredWidth(80);
		jTable.getColumnModel().getColumn(0).setResizable(false);

		jTable.getColumnModel().getColumn(1).setPreferredWidth(180);
		jTable.getColumnModel().getColumn(1).setResizable(false);

		jTable.getColumnModel().getColumn(2).setPreferredWidth(40);
		jTable.getColumnModel().getColumn(2).setResizable(false);
		
		jTable.getTableHeader().setReorderingAllowed(false);
		jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	}

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					FrmEstado frame = new FrmEstado();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public FrmEstado() {
		conexao.conecta();
		/*
		 * preencher jTable
		 */
		preencherTabela("select * from estado order by id_estado");
	
		setTitle("Cadastro de Estados");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 804, 477);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setBounds(12, 42, 769, 394);
		contentPane.add(panel);
		panel.setLayout(null);
		
		JLabel lblCod = new JLabel("Cod:");
		lblCod.setBounds(37, 22, 47, 28);
		panel.add(lblCod);
		
		JLabel lblEstado = new JLabel("Estado:");
		lblEstado.setBounds(242, 22, 70, 28);
		panel.add(lblEstado);
		
		JLabel lblSigla = new JLabel("Sigla:");
		lblSigla.setBounds(494, 22, 70, 28);
		panel.add(lblSigla);
		
		textFieldCod = new JTextField();
		textFieldCod.setEnabled(false);
		textFieldCod.setBounds(102, 25, 64, 24);
		panel.add(textFieldCod);
		textFieldCod.setColumns(10);
		
		textFieldEstado = new JTextField();
		textFieldEstado.setEnabled(false);
		textFieldEstado.setBounds(330, 25, 114, 24);
		panel.add(textFieldEstado);
		textFieldEstado.setColumns(10);
		
		textFieldSigla = new JTextField();
		textFieldSigla.setEnabled(false);
		textFieldSigla.setBounds(570, 25, 114, 24);
		panel.add(textFieldSigla);
		textFieldSigla.setColumns(10);
		
		btNovo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				textFieldEstado.setText("");
				textFieldSigla.setText("");
				textFieldCod.setText("");
				textFieldEstado.setEnabled(true);
				textFieldSigla.setEnabled(true);
				btEditar.setEnabled(false);
				btExcliur.setEnabled(false);
				btSalvar.setEnabled(true);
				btNovo.setEnabled(false);
				
			}
		});
		btNovo.setToolTipText("Novo");
		btNovo.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/images (9).jpg")));
		btNovo.setBounds(12, 110, 64, 64);
		panel.add(btNovo);
		btSalvar.setEnabled(false);
		
		btSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					PreparedStatement pst = conexao.conn.prepareStatement(
							"insert into estado (nm_estado, sg_estado) values (?, ?)");
					pst.setString(1, textFieldEstado.getText());
					pst.setString(2, textFieldSigla.getText());
					pst.executeUpdate();
					JOptionPane.showMessageDialog(rootPane, "Cadastrado com sucesso!");
				} catch (SQLException e) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao cadastrar!\n" + 
														"Erro: " + e.getMessage());		
				}
				preencherTabela("select * from estado order by id_estado");
				textFieldEstado.setText("");
				textFieldSigla.setText("");
				textFieldCod.setText("");
				textFieldEstado.setEnabled(false);
				textFieldSigla.setEnabled(false);
				btEditar.setEnabled(false);
				btExcliur.setEnabled(false);
				btSalvar.setEnabled(false);
				btNovo.setEnabled(true);
			}
		});
		btSalvar.setToolTipText("Salvar");
		btSalvar.setBackground(Color.WHITE);
		btSalvar.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/salvar_01.png")));
		btSalvar.setBounds(90, 110, 64, 64);
		panel.add(btSalvar);
		
		/*Botão editar*/
		btEditar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					PreparedStatement pst = conexao.conn.prepareStatement(
							"update estado set nm_estado = ?, sg_estado = ? where id_estado = ?");
					pst.setString(1, textFieldEstado.getText());
					pst.setString(2, textFieldSigla.getText());
					pst.setInt(3, Integer.parseInt(textFieldCod.getText()));
					pst.execute();
					JOptionPane.showMessageDialog(rootPane, "Editado com sucesso!");
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao editar 	!\n" + 
														"Erro: " + e1.getMessage());		
				}
				preencherTabela("select * from estado order by id_estado");
			}
		});
		
		btEditar.setEnabled(false);
		
		btEditar.setToolTipText("Editar");
		btEditar.setBackground(Color.WHITE);
		btEditar.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/kat-61821.png")));
		btEditar.setBounds(166, 110, 64, 64);
		panel.add(btEditar);
		btExcliur.setEnabled(false);

		/**
		 * Excluir
		 */
		btExcliur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					PreparedStatement ps = conexao.conn.prepareStatement(
							"delete from estado where sg_estado = ?");
					ps.setString(1, textFieldSigla.getText());
					ps.execute();
					JOptionPane.showMessageDialog(rootPane, "Excluido com sucesso!");
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(rootPane, "Erro ao cadastrar!\n" + 
														"Erro: " + e1.getMessage());		
				}
				preencherTabela("select * from estado order by id_estado");
				textFieldEstado.setText("");
				textFieldSigla.setText("");
				textFieldCod.setText("");
				textFieldEstado.setEnabled(false);
				textFieldSigla.setEnabled(false);
				btEditar.setEnabled(false);
				btExcliur.setEnabled(false);
				btSalvar.setEnabled(false);
				btNovo.setEnabled(true);
			}
		});
		btExcliur.setToolTipText("Excluir");
		btExcliur.setBackground(Color.WHITE);
		btExcliur.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/delete.gif")));
		btExcliur.setBounds(242, 110, 64, 64);
		panel.add(btExcliur);
		
		/**
		 * Sair
		 */
		btSair.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btSair.setToolTipText("Sair");
		btSair.setBackground(Color.WHITE);
		btSair.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/on-off.png")));
		btSair.setBounds(687, 110, 64, 64);
		panel.add(btSair);
		
		
		
		
		jTable.setBounds(12, 238, 739, 156);
		panel.add(jTable);
		
		JButton btPrimeiro = new JButton("");
		btPrimeiro.setToolTipText("Primeiro");
		btPrimeiro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				btEditar.setEnabled(true);
				btExcliur.setEnabled(true);
				try {
					conexao.executaSQL("select * from estado");
					conexao.rs.first();
					textFieldCod.setText(String.valueOf(conexao.rs.getInt("id_estado")));
					textFieldEstado.setText(conexao.rs.getString("nm_estado"));
					textFieldSigla.setText(conexao.rs.getString("sg_estado"));
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null, "Erro ao selecionar dados!\n" +
														"Erro: " + e1.getMessage());
				}
				textFieldEstado.setEnabled(true);
				textFieldSigla.setEnabled(true);
				
			}
		});
		btPrimeiro.setBackground(Color.WHITE);
		btPrimeiro.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/setaesuerda.jpeg")));
		btPrimeiro.setBounds(342, 110, 64, 64);
		panel.add(btPrimeiro);
		
		JButton btProximo = new JButton("");
		btProximo.setToolTipText("Proximo");
		btProximo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				btEditar.setEnabled(true);
				btExcliur.setEnabled(true);
				try {
					conexao.rs.next();
					textFieldCod.setText(String.valueOf(conexao.rs.getInt("id_estado")));
					textFieldEstado.setText(conexao.rs.getString("nm_estado"));
					textFieldSigla.setText(conexao.rs.getString("sg_estado"));
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null, "Erro ao selecionar dados!\n" +
														"Erro: " + e1.getMessage());
				}
				textFieldEstado.setEnabled(true);
				textFieldSigla.setEnabled(true);
			}
		});
		btProximo.setBackground(Color.WHITE);
		btProximo.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/seta.jpeg")));
		btProximo.setBounds(494, 110, 64, 64);
		panel.add(btProximo);
		
		JButton btAnterior = new JButton("");
		btAnterior.setToolTipText("Anterior");
		btAnterior.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				btEditar.setEnabled(true);
				btExcliur.setEnabled(true);
				
				try {
					conexao.rs.previous();
					textFieldCod.setText(String.valueOf(conexao.rs.getInt("id_estado")));
					textFieldEstado.setText(conexao.rs.getString("nm_estado"));
					textFieldSigla.setText(conexao.rs.getString("sg_estado"));
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null, "Erro ao selecionar dados!\n" +
														"Erro: " + e1.getMessage());
				}
				textFieldEstado.setEnabled(true);
				textFieldSigla.setEnabled(true);
			}
		});
		btAnterior.setBackground(Color.WHITE);
		btAnterior.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/esquseta.jpeg")));
		btAnterior.setBounds(418, 110, 64, 64);
		panel.add(btAnterior);
		
		JButton btUltimo = new JButton("");
		btUltimo.setToolTipText("Ultimo");
		btUltimo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				btEditar.setEnabled(true);
				btExcliur.setEnabled(true);
				try {
					conexao.executaSQL("select * from estado");
					conexao.rs.last();
					textFieldCod.setText(String.valueOf(conexao.rs.getInt("id_estado")));
					textFieldEstado.setText(conexao.rs.getString("nm_estado"));
					textFieldSigla.setText(conexao.rs.getString("sg_estado"));
				} catch (SQLException e1) {
					JOptionPane.showMessageDialog(null, "Erro ao selecionar dados!\n" +
														"Erro: " + e1.getMessage());
				}
				textFieldEstado.setEnabled(true);
				textFieldSigla.setEnabled(true);
			}
		});
		btUltimo.setBackground(Color.WHITE);
		btUltimo.setIcon(new ImageIcon(FrmEstado.class.getResource("/plugados/imagens/doublearrow.jpeg")));
		btUltimo.setBounds(570, 110, 64, 64);
		panel.add(btUltimo);
		
		JLabel lblEstados = new JLabel("Cadastro de Estados");
		lblEstados.setVerticalAlignment(SwingConstants.TOP);
		lblEstados.setHorizontalAlignment(SwingConstants.CENTER);
		lblEstados.setFont(new Font("Courier New", Font.BOLD, 30));
		lblEstados.setBounds(12, 0, 769, 34);
		contentPane.add(lblEstados);
		
	}
	
	
}
